/* ============================================================================
* 功能描述 ：zigbee通讯数据解析打包层
* 作者       ：ggls
* 创建日期 ：2024.04.11
* ----------------------------------------------------------------------------
* 更新历史 ：
*	日期 　　- 修改者   : 更新内容描述
*
* ============================================================================
*/

#ifndef __HLY_ZIGBEE_COMMUNICATA_H__
#define __HLY_ZIGBEE_COMMUNICATA_H__

#include "main.h"

#define ZIGBEE_VER 		0x80

#define HEADER 		0x55AA

typedef struct
{
	/*消息发送缓冲区*/
	unsigned char  app_data[64];
	unsigned char  app_len;
	
	unsigned char  ed_type; 	// 设备类型
	unsigned char  ed_Endpoint; // 设备端点

	char  		   zigbee_ready_flag;	// zigbee准备就绪标志
	char		   network_status;		// 入网状态

	
	unsigned long	last_peiwang_time;		/*配网进入时间*/
	
}zigbee_app_s;

typedef enum
{
	zigbee_ready 				= 0x01, // zigbee准备就绪
	read_device_Endpoint 		= 0x03,	// 读取MCU的端点数量
	read_device_type 			= 0x04,	// 读取MCU的设备类型
	read_device_attribute 		= 0x05, // 读取MCU指定设备属性
	modify_device_attribute 	= 0x06,	// 修改MCU指定设备属性
	request_device_Report_attr  = 0x07, // 请求MCU上报所有需要同步的设备属性
	zigbee_Issue_instructions	= 0x08, // zigbee下发指令
	set_number_of_endpoints		= 0x22, // 设置端点数量
	set_device_type				= 0x23, // 设置设备类型
	report_specified_type		= 0x24, // 上报设备指定属性
	get_specified_properties	= 0x25, // 向网关获取指定属性
	start_Protocol_stack		= 0x26, // 启动zigbee协议栈
	transparent_reporting       = 0x27, // 透传上报数据指令
	gujian_leix					= 0x28, // 固件类型

	
	zigbee_ready_back    		= 0x41, // zigbee准备就绪回复
	dpid_back					= 0x48, // 修改dpid成功
	mcu_ready_reply					= 0x61, // MCU就绪命令回复
	mcu_set_Endpoint_reply			= 0x62, // 设置端点数量回复
	mcu_set_device_type_reply   	= 0x63, // 设置设备类型回复
	report_device_attribute_reply	= 0x64, // 上报指定设备属性回复
	request_appoint_property_reply	= 0x65, // 向网关请求指定设备属性回复
	start_zigbee_protocol_reply     = 0x66, // 控制Zigbee模块启动Zigbee协议栈回复
}device_manage_cmd;

typedef enum
{
	notify_network_status 		= 0x01, // 通知MCU当前的网络状态
	query_network_tip 			= 0x02,	// 查询当前MCU是否处于配网提示状态
	notify_off_network 			= 0x03,	// 通知MCUZigbee模块被Zigbee网关离网
	control_zigbee_status		= 0x22, // 控制zigbee模块网络状态
	query_current_network_status = 0x23, // 查询zigbee模块当前的网络状态
	
	control_Network_Policy 		= 0x61, // 配置Zigbee模块的网络策略回复
	control_network_status 		= 0x62,	// 控制Zigbee模块入网/离网/重启回复
	query_network_status  		= 0x63, // 查询Zigbee模块当前的网络状态回复
	query_Communication_Status	= 0x64, // 查询Zigbee模块与Zigbee网关的通信状态回复
}network_manage_cmd;

typedef enum
{	
	temp_current 				= 0x01, // 温度
	humidity_value 				= 0x02,	// 湿度
	
	battery_percentage 			= 0x04,	// 电池电量
	temp_unit_convert			= 0x09, // 温度单位
	maxtemp_set				 	= 0x0a, // 温度上限
	minitemp_set		 		= 0x0b, // 温度下限
	maxhum_set			 		= 0x0c,	// 湿度上限
	minihum_set			  		= 0x0d, // 湿度下限
	temp_alarm					= 0x0e, // 温度报警	
	hum_alarm		 			= 0x0f, // 湿度报警
	
	temp_periodic_report		= 0x11,	// 温度上报间隔
	hum_periodic_report			= 0x12, // 湿度上报间隔
	temp_sensitivity			= 0x13, // 温度灵敏度
	hum_sensitivity				= 0x14, // 湿度灵敏度

}dpid_cmd;



enum 
{
	DEV_ZIGBEE_LCE = 0x0002,		// 温度LCD屏

};
	//温度(只上报)
	//备注:
#define DPID_TEMP_CURRENT 1
	//湿度(只上报)
	//备注:
#define DPID_HUMIDITY_VALUE 2
	//电池电量(只上报)
	//备注:
#define DPID_BATTERY_PERCENTAGE 4
	//温度单位(可下发可上报)
	//备注:
#define DPID_TEMP_UNIT_CONVERT 9
	//温度上限(可下发可上报)
	//备注:
#define DPID_MAXTEMP_SET 10
	//温度下限(可下发可上报)
	//备注:
#define DPID_MINITEMP_SET 11
	//湿度上限(可下发可上报)
	//备注:
#define DPID_MAXHUM_SET 12
	//湿度下限(可下发可上报)
	//备注:
#define DPID_MINIHUM_SET 13
	//温度报警(只上报)
	//备注:
#define DPID_TEMP_ALARM 14
	//湿度报警(只上报)
	//备注:
#define DPID_HUM_ALARM 15
	//温度灵敏度(可下发可上报)
	//备注:
#define DPID_TEMP_SENSITIVITY 19
	//湿度灵敏度(可下发可上报)
	//备注:
#define DPID_HUM_SENSITIVITY 20


void Zigbee_App_Init(void);
void Zigbee_Network_Status(void);
void Zigbee_Config_Set(void);

void Zigbee_Device_Manage(unsigned char *dev_data, char lenthg);
void Zigbee_Network_Manage(unsigned char *net_data, int lenthg);
void Hly_Packet_device_manage(device_manage_cmd type, char len, signed short h, char types);
void Hly_Packet_Network_msg(network_manage_cmd type, char len, signed short h);

void Hly_tuya_updata(dpid_cmd type ,int up_data, char lenthg, char types);

void Hly_Packet_ModelId(void);
void Hly_Packet_manufacturername(void);
void Hly_ctx_init();
void bl_Packet_Network_msg();
void bl_out_Network_msg();

#endif

